package app.maker.metier.stock.impl;

import java.util.List;

import javax.ejb.EJB;

import app.maker.entity.Produit;
import app.maker.entity.Sortie;
import app.maker.error.ProduitException;
import app.maker.error.SortieException;
import app.maker.metier.stock.intf.IGestionSortie;
import app.maker.stock.intf.IProduit;
import app.maker.stock.intf.ISortie;

public class GestionSortie implements IGestionSortie {

	@EJB
	private ISortie iSortie;

	@EJB
	private IProduit iProduit;

	public void ajouterSortie(Sortie sortie) throws SortieException, ProduitException {
		if((sortie.getProduit() == null) || (sortie.getType() == null) || (sortie.getUser() == null)) {
			throw new SortieException("Certaines informations non renseignées, veuillez corriger vos erreurs !!");
		}

		if (sortie.getQuantite() <= 0) {
			throw new SortieException("La quantité renseignée n'est pas acceptable !!");
		}

		Produit produitMAJ = iProduit.getProduit(sortie.getProduit().getIdProduit());
		float quantiteMAJ = produitMAJ.getQuantite() - sortie.getQuantite();
		produitMAJ.setQuantite(quantiteMAJ);
		iProduit.updateProduit(produitMAJ);
		iSortie.updateSortie(sortie);

	}

	public void annulerSortie(Sortie sortie) throws SortieException, ProduitException {
		boolean exist = this.existeSortie(sortie);

		if (!exist) {
			throw new SortieException("Sortie non trouvée, veuillez vérifier celle ci !!");
		} else {

			Produit produitMAJ = iProduit.getProduit(sortie.getProduit().getIdProduit());
			float quantiteMAJ = produitMAJ.getQuantite() + sortie.getQuantite();
			produitMAJ.setQuantite(quantiteMAJ);
			iProduit.updateProduit(produitMAJ);

			iSortie.deleteSortie(sortie);
		}
	}

	public void modifierSortie(Sortie sortie) throws SortieException, ProduitException {
		if((sortie.getProduit() == null) || (sortie.getType() == null) || (sortie.getUser() == null)) {
			throw new SortieException("Certaines informations non renseignées, veuillez corriger vos erreurs !!");
		}
		
		if (sortie.getQuantite() <= 0) {
			throw new SortieException("La quantité renseignée n'est pas acceptable !!");
		}
		
		Produit produitMAJ = iProduit.getProduit(sortie.getProduit().getIdProduit());
		int idSortieExistante = sortie.getId();
		Sortie ancienneSortie = iSortie.getSortie(idSortieExistante);
		produitMAJ.setQuantite(produitMAJ.getQuantite() + ancienneSortie.getQuantite() - sortie.getQuantite());
		
		iProduit.updateProduit(produitMAJ);
		
		iSortie.updateSortie(sortie);

	}

	public boolean existeSortie(Sortie sortie) {
		boolean existe = false;
		List<Sortie> listeSorties = iSortie.getAllSortie();

		for (Sortie e : listeSorties) {
			if (e.getId() == sortie.getId()) {
				existe = true;
			}
		}

		return existe;
	}

	public List<Sortie> getAllSorties() {
		return iSortie.getAllSortie();
	}

}
